package model;

/**
 * @author Max
 * <br>
 * date 2019/12/18 16:11
 * <p>
 *     对 ioc容器中 bean对象的描述
 * </p>
 *
 * @version 0.1
 */

public interface BeanDefinition {

    /**
     * 获取bean对象的name
     * @return bean的name
     * @since 0.1
     */
    String getName();

    /**
     * 为ioc容器中bean对象赋值
     * @param name bean的名字
     * @since 0.1
     */
    void setName(final String name);

    /**
     * 获取bean对应类型的name
     * @return bean对应的类型
     * @since 0.1
     */
    String getClassName();

    /**
     * 设置类类型
     * @param className 类类型
     * @since 0.1
     */
    void setClassName(final String className);

    /**
     * 指定bean的是 单例模式  还是  多例
     * singleton 、prototype
     * @param scope scope
     * @since 0.4
     */
    void setScope(final String scope);

    /**
     * 获取范围
     * @return scope
     * @since 0.4
     */
    String getScope();

    /**
     * 是否为延迟加载
     * @return 是否
     * @since 0.4
     */
    boolean isLazyInit();

    /**
     * 设置是否为延迟加载
     * @param lazyInit 是否为延迟加载
     * @since 0.4
     */
    void setLazyInit(final boolean lazyInit);

    /**
     * 设置初始化方法
     * @param initialize 初始化
     */
    void setInitialize(final String initialize);

    /**
     * 获取初始化方法
     * @return string
     */
    String getInitialize();

    /**
     * 设置销毁方法
     * @param destroy
     */
    void setDestroy(final String destroy);

    /**
     * 获取销毁方法
     * @return
     */
    String getDestroy();

}
